/**
 * 每个包里可能出现N种物品，第i中物品的概率是Pi，独立。
 * 因此每拆一个报可以获得若干物品。
 * 现在问，要想至少获得X个物品，拆包数量的期望是多少
 * 首先考虑一个包，令Dij是前i个物品中获得j个的概率
 * D00=1
 * Dij = Di[i - 1][j] * (1 - Pi) + D[i - 1][j - 1] * Pi
 * 于是，D[N][0,1,2,3,...,N]就是拆一个包能够获得若干数量物品的概率
 * 令 q = D[n], 则qi就是拆一个包获得i个物品的概率
 * 再令Ei是拿到i个物品的期望。则
 * Ei = (Ei + 1) * q0 + (E[i-1] + 1) * q1 + ... + (E[i-N] + 1) * qN
 * 有： Ei = (SIGMA{E[i-j]*qj, j=1,2,3,...} + 1) / (1 - q0)
 */
#include <bits/stdc++.h>
#include <bits/extc++.h>
using namespace std;

using Real = long double;
using llt = long long;
using vi = vector<int>;
using vll = vector<llt>;
using pii = pair<int, int>;
using pll = pair<llt, llt>;

int N;
int X;
vi P;
vector<vector<Real>> D;
vector<Real> E;

void work(){
    cin >> N >> X;
    P.assign(N, {});
    for(auto & i : P) cin >> i;

    D.assign(N + 1, vector<Real>(N + 1, 0));
    D[0][0] = 1;
    for(int i=1;i<=N;++i){
        Real p = P[i - 1] / 100.;
        for(int j=0;j<=i;++j){
            D[i][j] = D[i - 1][j] * (1. - p);
            if(j) D[i][j] += D[i - 1][j - 1] * p;
        }
    }

    // for(int i=0;i<=N;++i){
    //     printf("i=%d:",i);
    //     for(int j=0;j<=N;++j){
    //         printf("%8.3Lf", D[i][j]);
    //     }
    //     printf("\n");
    // }

    const auto & d = D[N];
    E.assign(X + 1, 0);
    // E[0] = 1;
    for(int i=1;i<=X;++i){
        Real s = 0;
        for(int j=1;j<=min(i,N);++j){
            s += E[i-j] * d[j]; 
        }
        s += 1;
        s /= 1. - d[0];
        E[i] = s;
    }
    cout << fixed << setprecision(12) << E[X] << endl;
    return;
}

int main(){
#ifndef ONLINE_JUDGE
    freopen("z.txt", "r", stdin);
#endif
    ios::sync_with_stdio(0); cin.tie(0); cout.tie(0);	
    int nofkase = 1;
	// cin >> nofkase;
	while(nofkase--) work();
	return 0;
}